package pe.gob.mininter.dirandro.vaadin.panel.informe;

import java.util.Date;

import pe.gob.mininter.dirandro.model.Informe;
import pe.gob.mininter.dirandro.model.Valor;
import pe.gob.mininter.dirandro.service.InformeService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.panel.util.DependenciaComponent;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;

public class PanelRegistroInformePrincipal extends CustomComponent implements ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private HorizontalLayout lytButton;
	@AutoGenerated
	private Button btnLimpiar;
	@AutoGenerated
	private Button btnGrabar;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_4;
	@AutoGenerated
	private Button btnDependencia;
	@AutoGenerated
	private Label lblDependencia;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;
	@AutoGenerated
	private PopupDateField dtFecRecepcion;
	@AutoGenerated
	private PopupDateField dtFecNotificacion;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_2;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoMedioRecepcion;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoFuente;
	@AutoGenerated
	private PopupDateField dtFechaResolucion;
	@AutoGenerated
	private TextField txtNroResolucion;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_3;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoResolucion;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoInforme;
	@AutoGenerated
	private Label lblNumero;
	private static final long serialVersionUID = -6728634845856075495L;
	
	private DependenciaComponent panelDependencia;
	private PanelRegistroInforme padre;
	private InformeService informeService;
	private Informe informe;	
	
	public PanelRegistroInforme getPadre() {
		return padre;
	}

	public void setPadre(PanelRegistroInforme padre) {
		this.padre = padre;
	}

	public Informe getInforme() {
		return informe;
	}

	public void setInforme(Informe informe) {
		this.informe = informe;
		habilitarEdicion(!informe.esNuevo());
	}

	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public PanelRegistroInformePrincipal() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		informeService = Injector.obtenerServicio(InformeService.class);
		postConstruct();
	}

	public void postConstruct(){
		
		limpiar();
		habilitarEdicion(false);
		
		lblNumero.setValue("");
		
		cmbTipoFuente.setInputPrompt("Tipo Fuente");
		//cmbTipoFuente.setRequired(true);
		cmbTipoFuente.setCodigoLista(Constante.LISTA.CODIGO.TIPO_FUENTE);
		cmbTipoFuente.attach();
		
		cmbTipoInforme.setInputPrompt("Tipo Informe");
		//cmbTipoInforme.setRequired(true);
		cmbTipoInforme.setCodigoLista(Constante.LISTA.CODIGO.TIPO_INFORME);
		cmbTipoInforme.attach();
		
		cmbTipoMedioRecepcion.setInputPrompt("Tipo Medio Recepción");
		//cmbTipoMedioRecepcion.setRequired(true);
		cmbTipoMedioRecepcion.setCodigoLista(Constante.LISTA.CODIGO.TIPO_MEDIO_REC);
		cmbTipoMedioRecepcion.attach();
		
		cmbTipoResolucion.setInputPrompt("Tipo Resolución");
		//cmbTipoResolucion.setRequired(true);
		cmbTipoResolucion.setCodigoLista(Constante.LISTA.CODIGO.TIPO_RESOLUCION);
		cmbTipoResolucion.attach();
		
		btnGrabar.addListener((ClickListener)this);
		btnLimpiar.addListener((ClickListener)this);
		btnDependencia.addListener((ClickListener)this);
		
	}
	
	public void cargarFormulario(){
		if(informe!=null){
			txtNroResolucion.setValue(informe.getNroResolucion());
			dtFecNotificacion.setValue(informe.getFechaNotificacionEmisor());
			dtFecRecepcion.setValue(informe.getFechaRecepcionNotificacion());
			dtFechaResolucion.setValue(informe.getFechaResolucion());
			cmbTipoFuente.setValue(informe.getTipoFuente());
			cmbTipoInforme.setValue(informe.getTipoInforme());
			cmbTipoMedioRecepcion.setValue(informe.getTipoMedioRecepcion());
			cmbTipoResolucion.setValue(informe.getTipoResolucion());
			if(informe.getUnidad()!=null)
				lblDependencia.setValue(informe.getUnidad().getNombre());
		}
		
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnGrabar)) {
			grabarCaso();
		}
		if(event.getButton().equals(btnLimpiar)) {
			limpiar();
		}
		if(event.getButton().equals(btnDependencia)) {
			obtenerDependencia();
		}
	}
	

	public void obtenerDependencia(){
		
		panelDependencia = new DependenciaComponent();
		
//		if(this.getParent().getParent()!=null){
//			panelDependencia.setParent(this.getParent().getParent());
//		}else{
//			panelDependencia.setParent(this.getParent());
//		}
		Window window=new Window(){
			
			private static final long serialVersionUID = 1L;

			@Override
			protected void close() {
				 getApplication().getMainWindow().removeWindow(getWindow());
			}

			@Override
			public void detach() {
				if(panelDependencia.getDependencia()!=null){
					informe.setUnidad(panelDependencia.getDependencia());
					lblDependencia.setValue(informe.getUnidad().getNombre() );
				}	
			}
			  
		};
		window.setCaption("Seleccionar Dependencia");
		window.addComponent(panelDependencia);
		window.setModal(true);
		window.setResizable(false);
		window.setWidth("700px");
		window.setHeight("-1px");
		getApplication().getMainWindow().addWindow(window);
		
	
	}
	
	public void grabarCaso(){
		//System.out.println("descripcion caso "+txtDescrpcion.getValue());
		
		informe.setNroResolucion((String)txtNroResolucion.getValue());
		informe.setFechaNotificacionEmisor((Date)dtFecNotificacion.getValue());
		informe.setFechaRecepcionNotificacion((Date)dtFecRecepcion.getValue());
		informe.setFechaResolucion((Date)dtFechaResolucion.getValue());
		informe.setTipoFuente((Valor)cmbTipoFuente.getValue());
		informe.setTipoInforme((Valor)cmbTipoInforme.getValue());
		informe.setTipoMedioRecepcion((Valor)cmbTipoMedioRecepcion.getValue());
		informe.setTipoResolucion((Valor)cmbTipoResolucion.getValue());
		//informe.setUnidad((Dependencia)cmbUnidad.getValue());
		
//		HarecUtil.validar(getWindow(), caso, new BeanValidar[]{
//        	new BeanValidar("nombre", new Object[]{"Nombre"}, txtNombre),
//        	new BeanValidar("descripcion", new Object[]{"Descripción"}, txtDescrpcion),
//        	new BeanValidar("situacion", new Object[]{"Situación"}, cmbSituacion),
//        	new BeanValidar("fecha", new Object[]{"Fecha de registro"}, dtSituacion)
//        });
		
		AlertDialog alertDialog =null;
		if(informe.esNuevo()){
			informeService.registrarInforme(informe);
			padre.habilitarTab(true);
			lblNumero.setValue(informe.getNumero());
			alertDialog = new  AlertDialog("Registro de Informe", "Se ha registrado el Informe correctamente", "Aceptar", "400");
		}else{
			informeService.actualizar(informe);	
			alertDialog = new  AlertDialog("Actualización de Informe", "Se ha actualizado el Informe correctamente", "Aceptar", "400");
		}		
		getApplication().getMainWindow().addWindow(alertDialog);
		habilitarEdicion(true);
		padre.setInforme(informe);
		
	}
	
	public void limpiar(){
		informe = new Informe();
		txtNroResolucion.setValue("");
		dtFechaResolucion.setValue(null);
		dtFecNotificacion.setValue(null);
		dtFecRecepcion.setValue(null);
		cmbTipoFuente.select(null);
		cmbTipoInforme.select(null);
		cmbTipoMedioRecepcion.select(null);
		cmbTipoResolucion.select(null);
	}
	
	private void habilitarEdicion(boolean flag){
		if(flag){
			btnGrabar.setCaption("Actualizar Informe");
		}
		else{
			btnGrabar.setCaption("Crear Informe");
		}
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(true);
		mainLayout.setSpacing(true);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("-1px");
		
		// lblNumero
		lblNumero = new Label();
		lblNumero.setCaption("Número de Informe");
		lblNumero.setImmediate(false);
		lblNumero.setWidth("600px");
		lblNumero.setHeight("-1px");
		lblNumero.setValue("Label");
		mainLayout.addComponent(lblNumero);
		
		// horizontalLayout_3
		horizontalLayout_3 = buildHorizontalLayout_3();
		mainLayout.addComponent(horizontalLayout_3);
		
		// txtNroResolucion
		txtNroResolucion = new TextField();
		txtNroResolucion.setCaption("Número de Resolución");
		txtNroResolucion.setImmediate(false);
		txtNroResolucion.setWidth("600px");
		txtNroResolucion.setHeight("-1px");
		txtNroResolucion.setRequired(true);
		txtNroResolucion.setInputPrompt("Número de Resolución");
		txtNroResolucion.setMaxLength(20);
		mainLayout.addComponent(txtNroResolucion);
		
		// dtFechaResolucion
		dtFechaResolucion = new PopupDateField();
		dtFechaResolucion.setCaption("Fecha de Resolución");
		dtFechaResolucion.setImmediate(false);
		dtFechaResolucion.setWidth("150px");
		dtFechaResolucion.setHeight("-1px");
		dtFechaResolucion.setResolution(4);
		mainLayout.addComponent(dtFechaResolucion);
		
		// horizontalLayout_2
		horizontalLayout_2 = buildHorizontalLayout_2();
		mainLayout.addComponent(horizontalLayout_2);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		mainLayout.addComponent(horizontalLayout_1);
		
		// horizontalLayout_4
		horizontalLayout_4 = buildHorizontalLayout_4();
		mainLayout.addComponent(horizontalLayout_4);
		
		// lytButton
		lytButton = buildLytButton();
		mainLayout.addComponent(lytButton);
		
		return mainLayout;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_3() {
		// common part: create layout
		horizontalLayout_3 = new HorizontalLayout();
		horizontalLayout_3.setImmediate(false);
		horizontalLayout_3.setWidth("-1px");
		horizontalLayout_3.setHeight("-1px");
		horizontalLayout_3.setMargin(false);
		
		// cmbTipoInforme
		cmbTipoInforme = new ComboBoxLOVS();
		cmbTipoInforme.setCaption("Tipo de Informe");
		cmbTipoInforme.setImmediate(false);
		cmbTipoInforme.setWidth("-1px");
		cmbTipoInforme.setHeight("-1px");
		horizontalLayout_3.addComponent(cmbTipoInforme);
		
		// cmbTipoResolucion
		cmbTipoResolucion = new ComboBoxLOVS();
		cmbTipoResolucion.setCaption("Tipo de Resolución");
		cmbTipoResolucion.setImmediate(false);
		cmbTipoResolucion.setWidth("-1px");
		cmbTipoResolucion.setHeight("-1px");
		horizontalLayout_3.addComponent(cmbTipoResolucion);
		
		return horizontalLayout_3;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_2() {
		// common part: create layout
		horizontalLayout_2 = new HorizontalLayout();
		horizontalLayout_2.setImmediate(false);
		horizontalLayout_2.setWidth("-1px");
		horizontalLayout_2.setHeight("-1px");
		horizontalLayout_2.setMargin(false);
		horizontalLayout_2.setSpacing(true);
		
		// cmbTipoFuente
		cmbTipoFuente = new ComboBoxLOVS();
		cmbTipoFuente.setCaption("Tipo de Fuente");
		cmbTipoFuente.setImmediate(false);
		cmbTipoFuente.setWidth("200px");
		cmbTipoFuente.setHeight("-1px");
		horizontalLayout_2.addComponent(cmbTipoFuente);
		
		// cmbTipoMedioRecepcion
		cmbTipoMedioRecepcion = new ComboBoxLOVS();
		cmbTipoMedioRecepcion.setCaption("Tipo Medio Recepción");
		cmbTipoMedioRecepcion.setImmediate(false);
		cmbTipoMedioRecepcion.setWidth("-1px");
		cmbTipoMedioRecepcion.setHeight("-1px");
		horizontalLayout_2.addComponent(cmbTipoMedioRecepcion);
		
		return horizontalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("-1px");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		horizontalLayout_1.setSpacing(true);
		
		// dtFecNotificacion
		dtFecNotificacion = new PopupDateField();
		dtFecNotificacion.setCaption("Fecha Notificación");
		dtFecNotificacion.setImmediate(false);
		dtFecNotificacion.setWidth("150px");
		dtFecNotificacion.setHeight("-1px");
		dtFecNotificacion.setResolution(4);
		horizontalLayout_1.addComponent(dtFecNotificacion);
		
		// dtFecRecepcion
		dtFecRecepcion = new PopupDateField();
		dtFecRecepcion.setCaption("Fecha Recepción");
		dtFecRecepcion.setImmediate(false);
		dtFecRecepcion.setWidth("150px");
		dtFecRecepcion.setHeight("-1px");
		dtFecRecepcion.setResolution(4);
		horizontalLayout_1.addComponent(dtFecRecepcion);
		
		return horizontalLayout_1;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_4() {
		// common part: create layout
		horizontalLayout_4 = new HorizontalLayout();
		horizontalLayout_4.setImmediate(false);
		horizontalLayout_4.setWidth("-1px");
		horizontalLayout_4.setHeight("-1px");
		horizontalLayout_4.setMargin(false);
		
		// lblDependencia
		lblDependencia = new Label();
		lblDependencia.setImmediate(false);
		lblDependencia.setWidth("300px");
		lblDependencia.setHeight("-1px");
		lblDependencia.setValue("-Seleccionar-");
		horizontalLayout_4.addComponent(lblDependencia);
		horizontalLayout_4.setComponentAlignment(lblDependencia, new Alignment(
				33));
		
		// btnDependencia
		btnDependencia = new Button();
		btnDependencia.setCaption("Unidad PPTID");
		btnDependencia.setImmediate(true);
		btnDependencia.setWidth("-1px");
		btnDependencia.setHeight("-1px");
		horizontalLayout_4.addComponent(btnDependencia);
		
		return horizontalLayout_4;
	}

	@AutoGenerated
	private HorizontalLayout buildLytButton() {
		// common part: create layout
		lytButton = new HorizontalLayout();
		lytButton.setImmediate(false);
		lytButton.setWidth("100.0%");
		lytButton.setHeight("-1px");
		lytButton.setMargin(false);
		lytButton.setSpacing(true);
		
		// btnGrabar
		btnGrabar = new Button();
		btnGrabar.setCaption("Grabar");
		btnGrabar.setImmediate(true);
		btnGrabar.setWidth("-1px");
		btnGrabar.setHeight("-1px");
		lytButton.addComponent(btnGrabar);
		lytButton.setComponentAlignment(btnGrabar, new Alignment(6));
		
		// btnLimpiar
		btnLimpiar = new Button();
		btnLimpiar.setCaption("Limpiar");
		btnLimpiar.setImmediate(true);
		btnLimpiar.setWidth("-1px");
		btnLimpiar.setHeight("-1px");
		lytButton.addComponent(btnLimpiar);
		
		return lytButton;
	}
	

}
